#include "../GUI.h"
#include "Core/Memory/HeapObject.h"
#include "Core/GUI/IWidget.h"

#ifndef _GUI_WIDGET_IMPL_WIN32_
#define _GUI_WIDGET_IMPL_WIN32_

namespace GUI
{
	namespace Win32
	{
		class Core::GUI::IWidget;
		class WidgetImpl : public Core::Memory::HeapObject
		{
		public:
			WidgetImpl();
			virtual ~WidgetImpl();
			int GetId()	const { return m_iId; }
			int GetWidth() const { return m_iWidth; }
			int GetHeight() const { return m_iHeight; }
			int	GetX() const { return m_iX; }
			int	GetY() const { return m_iY; }
			HWND GetHandle() const { return m_hWidget; }
			virtual void SetSize(int _iWidth, int _iHeight);
			virtual void SetPosition(int _x, int _y);
			virtual void SetStyle(const std::string & _style);
			bool Create(Core::GUI::IWidget * _pWidget);
			
		protected:
			virtual HWND CreateHandle() = 0;
			HWND m_hWidget;
			int m_iWidth;
			int m_iHeight;
			int m_iX;
			int m_iY;
			int m_iId;
		};
	}
}

#endif // _GUI_WIDGET_IMPL_WIN32_